home *** CD-ROM | disk | FTP | other *** search
/ The Glitch Apple Disk Collection / 2014.glitch.apple.collection.zip / indexed / SPACEVIK.DSK / STARSHIP SIMULATOR.bas < prev    next >
BASIC Source File  |  2014-09-09  |  10KB  |  134 lines

  1. 0  ONERR  GOTO 63999
  2. 1 XI = 29467:YI = 29469:ZI = 29471:P1 = 29473:B1 = 29474:H1 = 29475:CSN = 24582:SN = 24585:M1 = 24588:M2 = 24589:DI = 32768:CA = 36899:W1 = 20000:W2 =  -20000:HH = 256:HL = 255
  3. 2 EE = 199:SS = 13:EX = EE:VV = 160:Q = 1.41:X9 = 400:Y9 =  -100:Z9 =  -3500: POKE 232,HL: POKE 233,127:TX = 141:TT = TX:SG = 37494:LT = 38167:LA = 37585
  4. 8 L =  PEEK(XI):H =  PEEK(XI +1): GOSUB 6600:X = H:L =  PEEK(YI):H =  PEEK(YI +1): GOSUB 6600:Y = H:L =  PEEK(ZI):H =  PEEK(ZI +1): GOSUB 6600:Z = H:S =  PEEK(38157):E =  PEEK(38199):TE =  PEEK(38282 + PEEK(38209))
  5. 9  POKE 38149,7
  6. 15  FOR OO = 0 TO 1: IF  PEEK(38164) = 1  THEN 20
  7. 19 J =  PDL(1):K =  PDL(0): POKE 38397,J: POKE 38398,K
  8. 20 P =  PEEK(P1):B =  PEEK(B1):H =  PEEK(H1)
  9. 21  POKE M1,B: IF B >127  THEN 74
  10. 73  CALL CSN:BH = ( PEEK(M2) *HH) + PEEK(M1): GOTO 112
  11. 74  CALL CSN:A1 =  PEEK(M1):A2 =  PEEK(M2):A2 = A2 -HH:BH = (A2 *HH) +A1
  12. 112  POKE M1,P
  13. 114  IF P <63  OR P >190  THEN  CALL SN:A1 =  PEEK(M1):A2 =  PEEK(M2):ZP = (A2 *HH) +A1
  14. 116  IF P >63  AND P <190  THEN  CALL SN:A1 =  PEEK(M1):A2 =  PEEK(M2):A2 = A2 -HH:ZP = (A2 *HH) +A1
  15. 119  POKE M1,H
  16. 120  IF H <63  OR H >190  THEN  CALL SN:A1 =  PEEK(M1):A2 =  PEEK(M2):ZH = (A2 *HH) +A1
  17. 122  IF H >63  AND H <190  THEN  CALL SN:A1 =  PEEK(M1):A2 =  PEEK(M2):A2 = A2 -HH:ZH = (A2 *HH) +A1
  18. 123  POKE M1,H: IF H >127  THEN 125
  19. 124  CALL CSN:XH = ( PEEK(M2) *HH) + PEEK(M1): GOTO 126
  20. 125  CALL CSN:A1 =  PEEK(M1):A2 =  PEEK(M2):A2 = A2 -HH:XH = (A2 *HH) +A1
  21. 126  POKE M1,P: IF P >127  THEN 128
  22. 127  CALL CSN:YP = ( PEEK(M2) *HH) + PEEK(M1): GOTO 129
  23. 128  CALL CSN:A1 =  PEEK(M1):A2 =  PEEK(M2):A2 = A2 -HH:YP = (A2 *HH) +A1
  24. 129 YP = YP/DI:ZH = ZH/DI:XH = XH/DI:ZP = ZP/DI:X1 = S *(ZP *XH):Z1 = S *ZP *ZH:X = X +X1:Z = Z +Z1:Y1 = S *YP:Y = Y +Y1: IF P >190  OR P <64  THEN Y = Y -2 *Y1
  25. 133  IF X <W2  THEN X = W1
  26. 134  IF X >W1  THEN X = W2
  27. 135  IF Y <W2  THEN Y = W1
  28. 136  IF Y >W1  THEN Y = W2
  29. 137  IF Z <W2  THEN Z = W1
  30. 138  IF Z >W1  THEN Z = W2
  31. 140 BV% = X: GOSUB 6000: POKE XI,LO%: POKE XI +1,HI%:BV% = Y: GOSUB 6000: POKE YI,LO%: POKE YI +1,HI%:BV% = Z: GOSUB 6000: POKE ZI,LO%: POKE ZI +1,HI%
  32. 147  POKE 29461,84 +OO:OP =  ABS(OO -1): POKE 29463,OP: POKE 29465,OP: IF  PEEK(38210) = 1  THEN Y = Y -(6 -(S/10)): IF Y <20  THEN Y = 20: POKE P1,0: POKE B1,0
  33. 150  CALL CA: IF OO = 1  THEN  POKE 974,32: CALL 37936
  34. 153  IF OO = 0  THEN  POKE 974,64: CALL 37888
  35. 155  VTAB 24: HTAB 1: PRINT  INT(X/2);" ";: HTAB 7: PRINT  INT(Y/2);" ";: HTAB 13: PRINT  INT(Z/2);" ";: HTAB 26: PRINT  INT(H *Q);"  ";: HTAB 35: PRINT  INT(P *Q);"  ";
  36. 156  POKE 973,1: VTAB 8: HTAB 18: PRINT "-"; CHR$(91);"  "; CHR$(93);"-": POKE 973,0: IF  ABS(X) <900  AND  ABS(Y) <900  AND  ABS(Z) <900  AND  PEEK(38210) = 0  THEN  PRINT "<CTRL-D>RUNRE"
  37. 158  IF  PEEK(38210) = 1  AND Y >4000  THEN  PRINT "<CTRL-D>RUNORBIT"
  38. 159  HCOLOR= 0: DRAW 25 AT TT,133: DRAW 26 AT 136,VV: DRAW 25 AT EE,133: DRAW 25 AT SS,133:TX = 140 +((HL -B)/5.7): IF B <127  THEN TX = 140 -(B/5.7)
  39. 170 VY =  INT(167 -((HL -P)/4)): IF P <127  THEN VY =  INT(167 +(P/4))
  40. 173 SX = 13 +(S/2):EX = 199 +E
  41. 175  HCOLOR= 3: IF  PEEK(P1) >59  AND  PEEK(P1) <127  THEN  POKE P1,59
  42. 177  IF  PEEK(P1) <195  AND  PEEK(P1) >127  THEN  POKE P1,195
  43. 180  DRAW 13 AT TX,133: DRAW 14 AT 136,VY: DRAW 13 AT SX,133: DRAW 13 AT EX,133: IF OO = 1  THEN TT = TX:VV = VY:EE = EX:SS = SX
  44. 182  IF  PEEK(38149) = 7  THEN  POKE 38149,0: GOTO 200
  45. 185  IF  PEEK( -16287) >127  THEN  GOSUB 1500
  46. 189  IF  PEEK(38282 + PEEK(38209)) <2  THEN 200
  47. 190  IF  PEEK(38208) = 0  AND  PEEK(38210) = 1  THEN  GOSUB 3000: IF  RND(1) <.5  AND  PEEK(38207) >0  THEN  GOSUB 5000
  48. 192  IF  PEEK(38208) = 0  AND X > -3500  AND X <4500  AND Y > -3000  AND Y <3000  AND Z > -6000  AND Z <2000  THEN  GOSUB 3000: IF  RND(1) <.6  AND  PEEK(38207) >0  THEN  GOSUB 5000
  49. 200 K =  PEEK( -16384): IF K <128  THEN  NEXT : GOTO 15
  50. 201  IF K -176 >0  THEN K = K -176: POKE  -16368,0: ON K GOSUB 311,312,313,314
  51. 202  IF K <17  THEN 207
  52. 203  ON K -16 GOTO 317,318,319
  53. 204  IF K <34  THEN 207
  54. 205  IF K = 39  THEN  POKE LT,2: GOTO 500
  55. 206  ON K -33 GOTO 320,321
  56. 207  IF S <0  THEN S = 0
  57. 208  IF S >120  THEN S = 120
  58. 209  IF K = 24  THEN  PRINT "<CTRL-D>RUNH/D"
  59. 210  POKE 38157,S:K = 0: NEXT : GOTO 15
  60. 311 S = S -3: RETURN 
  61. 312 S = S +3: RETURN 
  62. 313 S = S -15: RETURN 
  63. 314 S = S +15: RETURN 
  64. 317  POKE LT,4: GOTO 500
  65. 318  POKE LT,3: GOTO 500
  66. 319  PRINT "<CTRL-D>RUNCOM"
  67. 320  PRINT "<CTRL-D>RUNRADAR"
  68. 321  POKE LT,1
  69. 500  CALL 38402: GOTO 1
  70. 1000 M8 = M1:M9 = M2:M3 = 3:M1 = 140:M2 = 40:X0 = X:Y0 = Y:Z0 = Z:S2 = 160:X2 = S2 *(ZP *XH):Z2 = S2 *ZP *ZH:Y2 = S2 *YP: IF  PEEK(38187) = 0  THEN 1090
  71. 1010  CALL SG: FOR M = 124 TO 62  STEP  -4: XDRAW M3 AT M1 +M2,M: XDRAW M3 AT M1 -M2,M: IF  PEEK(38210) = 1  AND Y0 <VV  THEN HIT = 1: GOTO 1060
  72. 1050  IF X0 <X9 +150  AND X0 >X9 -150  AND Y0 <Y9 +60  AND Y0 >Y9 -20  AND Z0 <Z9 +100  AND Z0 >Z9 -100  THEN HIT = 1
  73. 1060  XDRAW M3 AT M1 +M2,M: XDRAW M3 AT M1 -M2,M:M3 = M3 +.32:M2 = M2 -2:X0 = X0 +X2:Z0 = Z0 +Z2:Y0 = Y0 +Y2: IF P >190  OR P <64  THEN Y0 = Y0 -2 *Y2: NEXT 
  74. 1085  IF HIT = 1  THEN  GOSUB 1200:J1 = 10:J2 = 120: GOSUB 1535: GOTO 1090
  75. 1088  GOSUB 1100
  76. 1090 HIT = 0:M1 = M8:M2 = M9:J =  PEEK(38187) -2: GOSUB 3380: POKE 38187,J: RETURN 
  77. 1100  GOSUB 4100: POKE  -16298,0: POKE  -16297,0: HCOLOR= 3: FOR X0 = 1 TO 2: FOR LY = 0 TO 1: ROT= LY *25: XDRAW 2 AT M1 -M2,M: CALL SG: XDRAW 2 AT M1 +M2,M: CALL SG: NEXT : HCOLOR= 0: NEXT : ROT= 1: RETURN 
  78. 1200  FOR X0 = 1 TO 2: FOR LY = 1 TO 2: SCALE= LY: XDRAW 2 AT M1 -M2,M: NEXT : SCALE= 1: POKE  -16298,0: XDRAW 15 AT M1 -M2,M: XDRAW 16 AT M1 -M2,M: XDRAW 17 AT M1 -M2,M: XDRAW 18 AT M1 -M2,M: POKE  -16297,0: GOSUB 4100
  79. 1205  CALL SG
  80. 1220  FOR LY = 1 TO 2: SCALE= LY: XDRAW 2 AT M1 +M2,M: NEXT 
  81. 1222  SCALE= 1: POKE  -16298,0: XDRAW 15 AT M1 +M2,M: XDRAW 16 AT M1 +M2,M: XDRAW 17 AT M1 +M2,M: XDRAW 18 AT M1 +M2,M: POKE  -16297,0: NEXT : RETURN 
  82. 1500  IF  PEEK(38208) = 1  THEN  POKE 38208,0: POKE 38150,100
  83. 1501  POKE  -16300,0: IF  PEEK(38202) = 1  THEN 1000
  84. 1502  IF  PEEK(38186) = 0  THEN  RETURN 
  85. 1505 J1 = 10:J2 = 1:X1 = 90:X2 = 190:Y1 = 123:Y2 = 60:X3 = 136:X4 = 144: FOR LX = 1 TO 3: HCOLOR= 5: POKE  -16298,0: HPLOT X1,Y1 TO X3,Y2 TO X1 +4,Y1: HPLOT X2,Y1 TO X4,Y2 TO X2 -4,Y1: POKE  -16297,0: CALL LA
  86. 1530  HCOLOR= 0: HPLOT X1,Y1 TO X3,Y2 TO X1 +4,Y1: HPLOT X2,Y1 TO X4,Y2 TO X2 -4,Y1: FOR J = 1 TO 40: NEXT : NEXT 
  87. 1535 VP =  PEEK(38160) +(J1/(TE +1)): IF VP <HL  THEN  POKE 38160,VP
  88. 1540  IF  PEEK(38210) = 0  THEN DP =  PEEK(38152) +(J2/(TE +1)): IF DP <HL  THEN  POKE 38152,DP
  89. 1550  IF VP =  > PEEK(38150)  THEN  POKE 974,32: POKE  -16300,0: SPEED= 127: VTAB 13: HTAB 8: PRINT "THE PLANET HAS SURRENDERED": SPEED= 255: POKE 38219 + PEEK(38209),1: POKE 38208,1
  90. 1560  IF DP > PEEK(38204)  AND  PEEK(38205) < >0  THEN  PRINT "<CTRL-D>RUNEX"
  91. 1570  RETURN 
  92. 3000  IF  PEEK(38205) = 0  AND  PEEK(38210) = 0  THEN  RETURN 
  93. 3001  POKE  -16300,0: IF  RND(1) >.4  THEN 3030
  94. 3010  IF  RND(1) >.4  THEN 3030
  95. 3019  GOSUB 4110:HC =  RND(1) *5: FOR LY = 1 TO HC: POKE  -16298,0: FOR J = 1 TO 10: NEXT : POKE  -16297,0: CALL SG:X1 = ( RND(1) *40) +10: FOR J = 1 TO X1: NEXT : NEXT :DMG = 1
  96. 3030  IF  RND(1) >.3  THEN 3200
  97. 3032  GOSUB 4120: POKE  -16298,0: CALL SG: POKE  -16297,0:DMG = 1: CALL SG
  98. 3200  IF DMG = 0  THEN  RETURN 
  99. 3205 J =  PEEK(38200) -( RND(1) *1.1): GOSUB 3380: POKE 38200,J: IF  PEEK(38200) >10  AND  PEEK(38201) = 1  THEN  RETURN 
  100. 3207  IF L = 7  THEN  RETURN 
  101. 3230 J =  PEEK(38195) -( RND(1) *5): GOSUB 3380: POKE 38195,J
  102. 3260 J =  PEEK(38198) -( RND(1) *5): GOSUB 3380
  103. 3270  POKE 38198,J:J =  PEEK(38197) -( RND(1) *5): GOSUB 3380: POKE 38197,J:J =  PEEK(38196) -( RND(1) *5): GOSUB 3380: POKE 38196,J:J =  PEEK(38186) -( RND(1) *5): GOSUB 3380: POKE 38186,J:J =  PEEK(38193) -( RND(1) *4): GOSUB 3380
  104. 3350  POKE 38193,J:DMG = 0: IF J = 0  THEN  PRINT "<CTRL-D>RUNS/X"
  105. 3360  IF  PEEK(38393) = 0  THEN  POKE 38393,1: PRINT "<CTRL-D>RUNDMG"
  106. 3380  IF J <0  THEN J = 0
  107. 3381  RETURN 
  108. 4100  POKE 37491,10: POKE 37490,10: POKE 37492,0: POKE 37493,129: RETURN 
  109. 4110  POKE 37491,5: POKE 37490,5: POKE 37492,0: POKE 37493,0: RETURN 
  110. 4120  POKE 37491,7: POKE 37490,7: POKE 37492,0: POKE 37493,129: RETURN 
  111. 5000  POKE  -16300,0:X1 = ( RND(5) *260) +10:Y1 =  RND(1): IF Y1 > = .4  THEN Y1 = 10:Y2 =  RND(5) *7
  112. 5045  IF Y1 <.4  THEN Y1 = 120:Y2 =  RND(5) *7:Y2 = Y2 -(Y2 *2)
  113. 5050  IF X1 >190  THEN X2 =  -7:M = 9: GOTO 5090
  114. 5060  IF X1 <91  THEN X2 = 7:M = 10: GOTO 5090
  115. 5080 X2 =  -2:M = 8: IF  ABS(Y2) <4  THEN Y2 = Y2 *2
  116. 5090  XDRAW M AT X1,Y1: IF  RND(1) <.3  THEN  GOSUB 5098: GOSUB 5200
  117. 5095  XDRAW M AT X1,Y1:X1 = X1 +X2:Y1 = Y1 +Y2: IF Y1 <10  OR Y1 >120  OR X1 <10  OR X1 >270  THEN  RETURN 
  118. 5096  GOTO 5090
  119. 5098  GOSUB 4110: POKE  -16298,0: CALL SG: POKE  -16297,0:L = 7: GOSUB 3205:L = 0: RETURN 
  120. 5200  IF  PEEK(38165) < >3  THEN  RETURN 
  121. 5210 LX = 240:J =  RND(1): IF J <.6  THEN LX = 40
  122. 5230  FOR J = 1 TO 0  STEP  -1: HCOLOR= J *5: POKE  -16298,0: FOR J1 = 1 TO 5: NEXT : POKE  -16297,0: HPLOT LX -20,123 TO X1 -3,Y1 +3: HPLOT LX +20,123 TO X1 +3,Y1 +3: CALL SG: NEXT 
  123. 5240  IF  RND(5) <.3  THEN  GOSUB 5250: POP 
  124. 5245  RETURN 
  125. 5250  XDRAW M AT X1,Y1:M8 = M1:M9 = M2:M1 = X1:M2 = 4:M = Y1: GOSUB 1100:J =  PEEK(38207) -1: IF J > -1  THEN  POKE 38207,J
  126. 5251  GOTO 1090
  127. 6000 HI% = BV%/HH: IF BV% <0  THEN HI% = HI% +1
  128. 6010 LO% = BV% -HI% *HH: IF BV% > -1  THEN  RETURN 
  129. 6030 HI% = HL +HI%:LO% = HH +LO%: IF LO% <HH  THEN  RETURN 
  130. 6060 HI% = HI% +1:LO% = 0: RETURN 
  131. 6600  IF H <129  THEN 6640
  132. 6610 H = H -HL:H = H *HH:H = H +(L -HH): RETURN 
  133. 6640 H = (H *HH) +L: RETURN 
  134. 63999  PRINT : PRINT "<CTRL-D>INT"